﻿namespace CardPlay.Model.CardModel
{
    public static class CardFaceSequence
    {
        public static readonly CardFaceSequenceSpecification None =
            new CardFaceSequenceSpecification((a, b) => false);

        public static readonly CardFaceSequenceSpecification AnySuitAnyRank =
            new CardFaceSequenceSpecification(SuitSequence.DontCare, RankSequence.DontCare);

        public static readonly CardFaceSequenceSpecification DifferentSuitDescendingRank = 
            new CardFaceSequenceSpecification(SuitSequence.DifferentSuit, RankSequence.DescendingRank);

        public static readonly CardFaceSequenceSpecification SameSuit = 
            new CardFaceSequenceSpecification(SuitSequence.SameSuit, RankSequence.DontCare);

        public static readonly CardFaceSequenceSpecification SameSuitAdjacentRank = 
            new CardFaceSequenceSpecification(SuitSequence.SameSuit, RankSequence.AdjacentRank);

        public static readonly CardFaceSequenceSpecification AnySuitAdjacentRank =
            new CardFaceSequenceSpecification(SuitSequence.DontCare, RankSequence.AdjacentRank);

        public static readonly CardFaceSequenceSpecification AnySuitAscendingRank = 
            new CardFaceSequenceSpecification(SuitSequence.DontCare, RankSequence.AscendingRank);

        public static readonly CardFaceSequenceSpecification AnySuitDescendingRank = 
            new CardFaceSequenceSpecification(SuitSequence.DontCare, RankSequence.DescendingRank);

        public static readonly CardFaceSequenceSpecification SameSuitAscendingRank = 
            new CardFaceSequenceSpecification(SuitSequence.SameSuit, RankSequence.AscendingRank);

        public static readonly CardFaceSequenceSpecification SameSuitDescendingRank = 
            new CardFaceSequenceSpecification(SuitSequence.SameSuit, RankSequence.DescendingRank);

        public static readonly CardFaceSequenceSpecification SameColorDescendingRank =
            new CardFaceSequenceSpecification(SuitSequence.SameColor, RankSequence.DescendingRank);

        public static readonly CardFaceSequenceSpecification AlternatingColorDescendingRank = 
            new CardFaceSequenceSpecification(SuitSequence.DifferentColor, RankSequence.DescendingRank);

        public static readonly CardFaceSequenceSpecification SameColorAscendingRank =
            new CardFaceSequenceSpecification(SuitSequence.SameColor, RankSequence.AscendingRank);

        public static readonly CardFaceSequenceSpecification AlternatingColorAscendingRank =
            new CardFaceSequenceSpecification(SuitSequence.DifferentColor, RankSequence.AscendingRank);

        public static readonly CardFaceSequenceSpecification AlternatingColorAdjacentRank =
            new CardFaceSequenceSpecification(SuitSequence.DifferentColor, RankSequence.AdjacentRank);
    }
}